Virtualization is a technique commonly used to improve the performance and utilization of multi-core/multi-processor computer systems. In a virtualization environment, multiple virtual machines (VMs) can share the same physical hardware, such as processors/cores, memory and input/output (I/O) devices. A software layer called a hypervisor typically provides the virtualization, i.e., virtualization of physical processors, memory and peripheral devices. A hypervisor can be a Type-1 hypervisor, which runs on top of a host operating system, or a Type-2 hypervisor which runs directly on top of the hardware.
Virtualization may be desirable for any of various purposes. For example, it may be used to allow relatively low-cost hardware in conjunction with special-purpose software to be used to emulate a more expensive, special-purpose hardware system. Also, virtualization enables the sharing of hardware by multiple independent VMs. In addition, a VM can have an architecture that differs from that of the physical platform in which is implemented.
One application in which virtualization can be useful is network storage. Network storage is a common approach to backing up data, making large amounts of data accessible to multiple users, and other purposes. In a network storage environment, a storage server makes data available to client (host) systems by presenting or exporting to the clients one or more logical containers of data. There are various forms of network storage, including network attached storage (NAS) and storage area network (SAN). In a NAS context, a storage server services file-level requests from clients, whereas in a SAN context a storage server services block-level requests. Some storage servers are capable of servicing both file-level requests and block-level requests. By using virtualization, relatively low-cost generic computer hardware with appropriate software can be used instead of a relatively complex, expensive, special-purpose storage server. The result is a virtual storage server implemented on relatively generic computer hardware.
Another use for virtualization is to simulate a storage server, such as for development or testing. This can also be done in the context of network storage. One network storage manufacturer is known to provide such a simulator for a storage operating system used in its storage server products. The simulator is implemented as a VM, i.e., as a guest operating system, that runs on a VM provided by the VMware® Server. The virtual disks for the VM are stored as data image files (e.g., .vmdk files) on a physical disk attached to the host system, by using a file system provided by the host operating system. A “host system,” as the term is used herein, refers to a physical processing system or device, such as a computer. A “file”, as used herein, is any logical container of data.
To support the ability to move the simulator from one host system to another, the data image files of the simulator are stored on a network file system (NFS) server that is coupled to all participating host systems. With storage operating system disks being simulated as files on these virtual disks seen by the guest operating system, each disk input/output (I/O) operation on the simulated disks results in propagation of the I/O operation from a guest OS Filesystem I/O to a Guest OS disk I/O, and then to a host OS NFS I/O. This multi-step sequence adds significant overhead to the storage OS disk I/O operations because of the involvement of NFS and networking overheads.
It is also known in the art to use non-volatile random access memory (NVRAM) in the form of battery-backed RAM in certain storage servers to improve performance or increase reliability. For example, certain storage servers maintain in NVRAM a log of write requests received from clients. This log is sometimes referred to as the “NVLog”. The NVLog includes a separate entry for each write request received from a client since the last time accumulated client writes were flushed to disk (an event sometimes called a “consistency point”). Generally, the NVLog is only used in the event of a failure, i.e., to recover writes that would otherwise be lost. In the event of a failure, it may be possible to replay the NVLog to reconstruct the current state of stored data just prior to the failure. After each consistency point is completed, the NVLog is cleared and started anew.
However, implementing an NVRAM in a virtual storage server or in a simulator for a storage operating system is problematic. Since a virtual storage server is not a physical entity, it normally has to work with an emulated NVRAM backed by a physical storage device, such as a disk. Any client write to the virtual storage server therefore ends up writing to disk. Since a disk has substantially lower throughput and higher (and less predictable) latency than RAM, this sort of emulation can have a significant adverse effect on the performance of a virtual storage server or a simulator of a storage operating system. If a NAS protocol such as NFS is used to access such disk(s), that increases the latency even further.